package com.xuetang.mapper;

import com.xuetang.entity.DietRecord;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 饮食记录Mapper接口
 */
public interface DietRecordMapper {

        /**
         * 分页获取用户饮食记录列表
         * 
         * @param userId 用户ID
         * @param offset 偏移量
         * @param limit  限制数量
         * @return 饮食记录列表
         */
        List<DietRecord> listByUserId(@Param("userId") Long userId, @Param("offset") int offset,
                        @Param("limit") int limit);

        /**
         * 根据日期范围获取用户饮食记录
         * 
         * @param userId    用户ID
         * @param startDate 开始日期
         * @param endDate   结束日期
         * @param offset    偏移量
         * @param limit     限制数量
         * @return 饮食记录列表
         */
        List<DietRecord> listByDateRange(@Param("userId") Long userId,
                        @Param("startDate") Date startDate,
                        @Param("endDate") Date endDate,
                        @Param("offset") int offset,
                        @Param("limit") int limit);

        /**
         * 获取指定日期的用户饮食记录
         * 
         * @param userId 用户ID
         * @param date   日期
         * @return 饮食记录
         */
        DietRecord getByUserIdAndDate(@Param("userId") Long userId, @Param("date") Date date);

        /**
         * 根据ID获取饮食记录
         * 
         * @param id 记录ID
         * @return 饮食记录
         */
        DietRecord getById(@Param("id") Long id);

        /**
         * 新增饮食记录
         * 
         * @param record 饮食记录
         * @return 影响行数
         */
        int insert(DietRecord record);

        /**
         * 更新饮食记录
         * 
         * @param record 饮食记录
         * @return 影响行数
         */
        int update(DietRecord record);

        /**
         * 删除饮食记录
         * 
         * @param id 记录ID
         * @return 影响行数
         */
        int delete(@Param("id") Long id);

        /**
         * 统计用户饮食记录总数
         * 
         * @param userId 用户ID
         * @return 记录总数
         */
        int countByUserId(@Param("userId") Long userId);

        /**
         * 统计指定日期范围内的用户饮食记录总数
         * 
         * @param userId    用户ID
         * @param startDate 开始日期
         * @param endDate   结束日期
         * @return 记录总数
         */
        int countByDateRange(@Param("userId") Long userId,
                        @Param("startDate") Date startDate,
                        @Param("endDate") Date endDate);
}